package com.flyco.modules.pms.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.flyco.common.api.vo.Result;
import com.flyco.modules.pms.entity.PmsProduct;
import com.baomidou.mybatisplus.extension.service.IService;
import com.flyco.modules.pms.entity.PmsProductPics;
import com.flyco.modules.pms.entity.PmsSkuStock;
import com.flyco.modules.pms.model.ProductUnitSpec;
import com.flyco.modules.pms.vo.PmsProductPicsVO;
import com.flyco.modules.pms.vo.PmsProductExportVO;
import com.flyco.modules.pms.vo.PmsProductSkuForOrderVO;
import com.flyco.modules.pms.vo.PmsProductSkuVO;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * @Description: 商品信息
 * @Author: flyco
 * @Date:   2019-11-19
 * @Version: V1.0
 */
public interface IPmsProductService extends IService<PmsProduct> {

    Result<?> toNetStock(Integer brandCategory);

    /**
     * 添加一对多
     *
     */
    public void saveMain(PmsProduct pmsProduct,List<PmsSkuStock> pmsSkuStockList) ;

    public void saveMainWithPics(List<PmsProductPicsVO> vos);

    /**
     * 修改一对多
     *
     */
    public void updateMain(PmsProduct pmsProduct, List<PmsSkuStock> pmsSkuStockList);

    /**
     * 删除一对多
     */
    public void delMain (Long id);

    /**
     * 批量删除一对多
     */
    public void delBatchMain (Collection<? extends Serializable> idList);

    public PmsProduct getByProductSn(String productSn);
    PmsProduct getBySkuCode(String skuCode);

    public List<PmsProductSkuVO> getProductSkuList();

    public List<PmsProductSkuForOrderVO> getProductSkuForOrderList(Long storeId, List<String> skuCodes);

    public List<PmsProductSkuForOrderVO> queryProductSkuList(List<Long> storeIds, List<String> productSns, List<String> skuCodes);

    List<PmsProduct> queryLogicDeleted();

    public List<PmsProduct> queryLogicDeleted(LambdaQueryWrapper<PmsProduct> wrapper);

    public boolean revertLogicDeleted(List<String> productIds, PmsProduct updateEntity);

    Page<PmsProduct> getProductPage(Page<PmsProduct> page, Wrapper<PmsProduct> wrapper, Long partnerId);

    Page<PmsProduct> getProductPageByStoreId(Page<PmsProduct> page, Wrapper<PmsProduct> wrapper, String storeId);

    Page<PmsProduct> getProductPageByChannelId(Page<PmsProduct> page, Wrapper<PmsProduct> wrapper, String channelId);

    List<PmsProduct> getProductListWithOutPartner (List<Long> ids);

    public List<PmsProductExportVO> getProductExportList(List<Long> idList, List<String> storeIdList);

    List<PmsProduct> getProductList(PmsProduct pmsProduct, Integer pageNo, Integer pageSize);
    Integer getProductCount(PmsProduct pmsProduct);
    List<PmsProduct> getProductListByProductName(String productName);

    @Deprecated
    void updateProductSpec();
    List<ProductUnitSpec> getProductUnitSpec();
    void autoInsertProduct();

    void autoUpdateProductSn();
    void autoUpdateProductFromBase();

    List<PmsProduct> getByIds(List<Long> productId);
    List<PmsProduct> getAllByIds(List<Long> productId);

    //查询所有商品列表，包括下线的。再退货里面找商品
    List<PmsProduct> getProductListByName(String name);
}
